package com.bbs.utils;

/**
 * 这是一个能够检测一个字符串是否符合密码的基本要求的工具类
 * 目前能做的还很少
 * 现在能做：
 * 判断字符串中是否至少包含字母和数字
 * 判断字符串中的每一个字符是否是空白符
 * 判断字符串中的每一个字符的编码是否小于127
 */
public class PasswordChecker {

    private PasswordChecker() {
    }

    public static PasswordCheckResult checkPassword(String target) {
        if (!(target.matches("^.*[a-zA-Z]+.*$") && target.matches("^.*[0-9]+.*$"))) {
            return PasswordCheckResult.MUST_CONTAIN_DIGITS_AND_LETTERS;
        }
        if (target.matches("^.*[\\s]+.*$")) {
            return PasswordCheckResult.CONTAIN_BLANK;
        }
        for (int i = 0; i < target.length(); i++) {
            if (i > 127) return PasswordCheckResult.CONTAIN_ILLEGAL_CHARACTERS;
        }
        return PasswordCheckResult.SUCCESS;
    }

    public enum PasswordCheckResult {
        CONTAIN_BLANK("密码不得包含空字符"), CONTAIN_ILLEGAL_CHARACTERS("密码不得包含非法字符"), SUCCESS("密码合法"), MUST_CONTAIN_DIGITS_AND_LETTERS("密码必须包含数字、字母");
        private final String message;

        PasswordCheckResult(String message) {
            this.message = message;
        }

        public String getMessage() {
            return this.message;
        }

        @Override
        public String toString() {
            return "PasswordCheckResult{" + "message='" + message + '\'' + '}';
        }
    }
}
